説明
バグレポート
ナビゲーターとヒーロー コントローラーのスコープにおけるより厳密なアサーション
まとめ
フレームワークは、存在することを検出するとアサーション エラーをスローします。 複数のナビゲータが 1 つのヒーロー コントローラ スコープに登録されています。
コンテクスト
ヒーロー コントローラー スコープは、ウィジェットのヒーロー コントローラーをホストします。 サブツリー。ヒーロー コントローラーは、次の時点で 1 つのナビゲーターのみをサポートできます。 時間。以前は、それを保証するアサーションはありませんでした。
変更内容の説明
この変更後にコードがアサーション エラーをスローし始めた場合、 これは、この変更の前からコードがすでに壊れていたことを意味します。 同じヒーローの下に複数のナビゲーターを登録することができます コントローラー スコープでは、ヒーロー アニメーションをトリガーできません。 彼らのルートは変わります。この変更により、この問題が表面化しただけです。
移行ガイド
例外をスローし始めるアプリケーションの例。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
builder: (BuildContext context, Widget child) {
// Builds two parallel navigators. This throws
// error because both of navigators are under the same
// hero controller scope created by MaterialApp.
return Stack(
children: <Widget>[
Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute<void>(
settings: settings,
builder: (BuildContext context) {
return const Text('first Navigator');
}
);
},
),
Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute<void>(
settings: settings,
builder: (BuildContext context) {
return const Text('Second Navigator');
}
);
},
),
],
);
}
)
);
}
独自のヒーロー コントローラー スコープを導入することで、このアプリケーションを修正できます。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
builder: (BuildContext context, Widget child) {
// Builds two parallel navigators.
return Stack(
children: <Widget>[
HeroControllerScope(
controller: MaterialApp.createMaterialHeroController(),
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute<void>(
settings: settings,
builder: (BuildContext context) {
return const Text('first Navigator');
}
);
},
),
),
HeroControllerScope(
controller: MaterialApp.createMaterialHeroController(),
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute<void>(
settings: settings,
builder: (BuildContext context) {
return const Text('second Navigator');
}
);
},
),
),
],
);
}
)
);
}
タイムライン
リリースされたバージョン: 1.20.0
安定版リリース: 1.20
参考文献
API ドキュメント:
Navigator
HeroController
HeroControllerScope
関連する問題:
- 問題 45938
関連する PR:
- ヒーロー コントローラー スコープをクリーンアップする